package com.yangkunhong.www.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yangkunhong.www.config.YangKunHongInfo;
import com.yangkunhong.www.entity.Illness;
import com.yangkunhong.www.entity.User;
import com.yangkunhong.www.service.IllnessService;
import com.yangkunhong.www.util.Assert;
import com.yangkunhong.www.vo.request.FeedBackRequestVo;
import com.yangkunhong.www.vo.response.FeedBackResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import java.util.HashMap;

/*
* @Controller
* 表示该类是一个控制器 MVC中的C层
* 可以处理前端浏览器的请求
* */
@Controller
public class IndexController {

    //自动注入配置类
    @Autowired
    private YangKunHongInfo yangKunHongInfo;
    @Autowired
    private IllnessService illnessService;


    //表示GET请求/index的URL会到达该方法
    @RequestMapping("/index")
    //参数非必填,内部实际转为null,所以要求类型是引用类型【自定义数据类型、包装类】
    //不可以是基本的数据类型
    //类型
    //如何设置参数参数的必填【业务层面数据合法性】
    //参数名称与前端完全一致？？a--->abc
    //@RequestParam(name = "d", required = true)  String ie 表示1前端参数d映射为变量ie,同时要求必填
    public String index(Model model,FeedBackRequestVo feedBackRequestVo){
        System.out.println("配置信息："+yangKunHongInfo);
        System.out.println(feedBackRequestVo);//@614661b5
        //业务逻辑代码....
        //返回结果【数据】
        System.out.println("表示GET请求/index的URL会到达该方法");

        //设置数据回显到页面
        //第一种简单的数据  参数名=参数值
        model.addAttribute("username","班级学号姓名");
        //第二种  自定义的数据类型
        FeedBackResponseVo feedBackResponseVo = new FeedBackResponseVo();
        feedBackResponseVo.setName("测试");
        feedBackResponseVo.setEmail("123@qq.com");
        feedBackResponseVo.setTitle("留言标题");
        feedBackResponseVo.setContent("留言详细内容");
        model.addAttribute("feedBackInfo",feedBackResponseVo);

        //第三种 Map数据回传

        HashMap<String,String> hashMap = new HashMap<>();
        hashMap.put("name","测试Map");
        hashMap.put("email","123@qq.com");
        hashMap.put("title","留言标题");
        hashMap.put("content","留言详细内容");
        model.addAttribute("mapInfo",hashMap);

        model.addAttribute(hashMap);


        return "index";
    }

    /**
     * 疾病百科页面
     * @param model
     * @return
     */
    @RequestMapping("/findIllness")
    public String findIllness101(Model model,String illnessName,@RequestParam(defaultValue = "1") Integer page){
        //....
        //读取illness表的数据 分页[每页显示的行数默认10，当前第几页]

        IPage<Illness> dataByIllnessName = illnessService.getIllnessPageDataByIllnessName(illnessName, 10, page);

        model.addAttribute("illness",dataByIllnessName.getRecords());

        return "search-illness";//templates目录下文件名
    }

    /**
     * 查找药品页面
     * @param model
     * @return
     */
    @RequestMapping("/findMedicines")
    public String findMedicines(Model model){
        //....

        return "all-illness";//templates目录下文件名
    }

    /**
     * 智能医生页面
     * @param model
     * @return
     */
    @RequestMapping("/doctor")
    public String doctor(Model model){
        //....

        return "doctor";//templates目录下文件名
    }

    /**
     * 反馈页面
     * @param model
     * @return
     */
    @RequestMapping("/feedback.html")
    public String feedback(Model model){
        //....

        return "feedback";//templates目录下文件名
    }
    @ModelAttribute
    public void commonRes(Model model){

        model.addAttribute("name","杨坤红");
    }
    /**
     * 退出登录
     */
    @GetMapping("/logout")
    public String logout(HttpSession session) {
        session.invalidate();
        return "redirect:/index";
    }

    @GetMapping("/profile")
    public String profile(HttpSession session){
        //先判断是否处于登录状态
        User loginUser = (User) session.getAttribute("loginUser");
        if(Assert.isEmpty(loginUser)){
            return "redirect:/index";
        }


        return "profile";
    }
    /**
     * 退出登录
     */
    @GetMapping("/aboutUs")
    public String about(HttpSession session) {
        session.invalidate();
        return "about";
    }

}
